package com.practice.stream;


import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * java中的流
 * 1.创建流
 *  1.1从集合创建
 *  1.2从数组创建
 *  1.3从文件创建
 * 2.中间操作：不会直接返回结果，而是返回一个新的流，可以继续进行链式调用。
 *  2.1 filter 过滤
 *  2.2 map 转换流中的元素
 *  2.3 flatMap 多个流进行合并
 *  2.4 sorted 对流中的元素进行排序
 *  2.5 distinct 去重
 * 3.终端操作：返回一个结果或副作用，执行后流会被关闭，无法再次使用。
 *  3.1 forEach 遍历流中每一个元素
 *  3.2 collect 将流中元素收集到集合中
 *  3.3 reduce 聚合操作
 *  3.4 count 统计流中的数量
 *  3.5 findAny/findFirst 查找元素
 *  3.6 max/min 找最值
 * 4.并行流
 */
public class javaStreamPractice {
    public static void main(String[] args) {
        //将数组转为为集合
        int[] array = {1,2,3,4,5};
        /**
         * .boxed() 是 IntStream、LongStream 和 DoubleStream 提供的一个方法，
         * 用于将原始类型流（如 int、long、double）转换为对应的包装类型流（如 Integer、Long、Double）。这种转换是必要的
         * 因为某些操作（如 Collectors.toMap）需要 Stream 类型，而原始类型流（如 IntStream）不能直接用于这些操作。
         */
        // 先生成下标流，从0到array.length
        Map<Integer, Integer> map = IntStream.range(0,array.length)
                // 将IntStream转化为Stream<Integer>
                .boxed()
                // 使用collect收集，用Collector转化为map
                .collect(Collectors.toMap(i -> i, i -> array[i]));
        System.out.println(map);
    }
}
